/**
 * 获取页面中的子页面
 **/
$("iframe").get(0)

/**
 * 获取页面中的子页面的window对象
 **/
$("iframe").get(0).contentWindow

/**
 * 获取页面中的子页面的文档内容
 **/
$("iframe").get(0).contentWindow.document
$("iframe").get(0).contentDocument


// ---------------------

/**
 * 在子页面中获取到父页面。返回当前窗口的直接父对象
 * 如果一个窗口没有父窗口,则它的 parent 属性为自身的引用.
 * @window window对象为子页面的window对象，而非父页面的window对象。。。。。
 **/
var parent = window.parent


// ---------------------

/**
 * 判断子iframe何时加载完成解决方案
 **/
$("iframe").load(function () {
    alert('使用Jquery的方式');
});
onload
$("iframe").get(0).onload = function () {
    alert('使用原生JavaScript的方式');
};

/**
 * 返回第num个父页面的window对象。
 * @num 表示要获取到第几个父页面，默认是前一个。
 **/
function getParent(num = 1) {
    if (window === top) return window;
    var win = null;
    for (let index = 0; index < num; index++) {
        win = win ? win.parent : window.parent;
        if (win === top) return win;
    }
    return win;
}

/**
 * 返回当前页面的所有子页面iframe的window对象,或是返回指定url/id的iframe的window对象。
 * 默认是同域名的。
 **/
function getFrames(id, src) {
    console.log('111', )
    var frames = [];
    var __frames__ = window.frames;
    if (__frames__.length === 0) return null;
    if (id && typeof id !== "string") return null;
    if (src && typeof src !== "string") return null;
    for (var i = 0; i < __frames__.length; i++) {
        if (__frames__[i].frameElement.src === src || (id && __frames__[i].frameElement.id === id)) {
            frames.push(__frames__[i])
            return frames;
        }
    }
    return frames.length > 0 ? frames : null;
}

/**
 * 在整个窗口中获取指定id或是src的frame的window对象，找不到则返回null
 * @id iframe 元素的id
 * @src iframe 元素的src
 * @frames 最先查询的frame对象的集合
 **/
function findFrame(id, src, frames) {
    console.log('===', )
    if (!frames) {
        frames = top.frames;
    }
    var returnFrame = null;
    if (frames.length === 0) return null;
    if (id && typeof id !== "string") return null;
    if (src && typeof src !== "string") return null;
    for (var i = 0; i < frames.length; i++) {
        if (frames[i].frameElement.src.indexOf(src) !== -1 || decodeURIComponent(frames[i].frameElement.src).indexOf(src) !== -1 ||
            decodeURIComponent(frames[i].frameElement.src).indexOf(decodeURIComponent(src)) !== -1 || (id && frames[i].frameElement.id === id)) {
            return frames[i];
        }
        returnFrame = findFrame(id, src, frames[i])
    }
    return returnFrame ? returnFrame : null;
}

findFrame(null, null)



/**
 * 定获iframeArr_src没有值时，取iframe src 嵌套数组
 *   @param {boolean} isEncodeURI 是否 url编码
 * 
 * 定获iframeArr_src有值时，根据数组iframe src 索引获取iframe
 *  @param {Array} iframeArr_id 索引iframe的id（iframe的src）
 * 
 * 注意：当isEncodeURI设置为false时，用于获取iframe就也要设置isEncodeURI为false
 */
function findIframe(iframeArr_src, isEncodeURI = true) {
    if (!iframeArr_src) {
        var iframeSrcArr = []
        pushPIframeSrc(window.frameElement)
        return isEncodeURI ? encodeURIComponent(JSON.stringify(iframeSrcArr)) : iframeSrcArr

        function pushPIframeSrc(iframe) {
            if (!iframe) return;
            iframeSrcArr.unshift(iframe.getAttribute('src'))
            pushPIframeSrc(iframe.contentWindow.parent.frameElement)
        }
    } else {
        iframeArr_src = JSON.parse(isEncodeURI ? decodeURIComponent(iframeArr_src) : iframeArr_src)
        if (!Array.isArray(iframeArr_src)) return;
        var iframe
        iframeArr_src.forEach(function (item, i) {

            if (!item) return
            var iframeW
            if (!iframe) iframeW = top;
            else iframeW = iframe.contentWindow;
            iframe = iframeW.document.querySelector('iframe[src="' + item + '"]')
        })
        return iframe ? iframe.contentWindow : iframe
    }
}